/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.techopropio.bfh.service;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
import com.techopropio.bfh.dao.Conexion;
import com.techopropio.bfh.model.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.rowset.CachedRowSet;

/**
 *
 * @author Herminio
 */
public class SolicitudDaoImpl implements SolicitudDao {

    @Override
    public void enviarSolicitud(Solicitud solic) {
        try {
            Connection conn = Conexion.obtenerConnexion();

            //Insertamos los datos ala tabla Solicitud
            PreparedStatement s1 = (PreparedStatement) conn.prepareStatement("INSERT INTO `solicitud` "
                    + "( telefono, numDependientes, numVecesPostulacion, "
                    + "numDiscapacitados, fechaInscripcion, domicilioActual, "
                    + "entidadFinanciera, montoAhorro, numCuenta, fechaApertura, "
                    + "estadoAceptacion, "
                    + "idConvocatoria, idUsuario)"
                    + "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,? )");

            s1.setString(1, solic.getTelefono());
            s1.setInt(2, solic.getNumDependientes());
            s1.setInt(3, solic.getNumvecesPostulacion());
            s1.setInt(4, solic.getNumDiscapacitados());
            s1.setDate(5, solic.getFechaInscripcion());
            s1.setString(6, solic.getDomicilioActual());
            s1.setString(7, solic.getEntidadFinanciera());
            s1.setDouble(8, solic.getMontoAhorro());
            s1.setString(9, solic.getNumCuenta());
            s1.setDate(10, solic.getFechaApertura());
            s1.setString(11, solic.getEstadoAceptacion());
            s1.setInt(12, solic.getConvocatoria().getId());
            s1.setInt(13, solic.getUser().getId());


            s1.executeUpdate();

            ResultSet rs = s1.executeQuery("select * from solicitud s where s.idUsuario=" + solic.getUser().getId() + ";");

            if (rs.next()) {
                solic.setId(rs.getInt("idSolicitud"));
                if (solic.getVictimaTerrorismo() != null) {
                    s1 = (PreparedStatement) conn.prepareStatement("INSERT INTO `victimaterrorismo` "
                            + "(dni, nombres, apellidos, parentescoJF, idSolicitud )"
                            + "values (?,?,?,?,?)");
                    s1.setString(1, solic.getVictimaTerrorismo().getDni());
                    s1.setString(2, solic.getVictimaTerrorismo().getNombres());
                    //                s1.setString(3,solic.getVictimaTerrorismo().getApellidos());
                    s1.setString(4, solic.getVictimaTerrorismo().getParentesco());
                    s1.setInt(5, solic.getId());
                    s1.executeUpdate();
                }

                if (solic.getAportacionFonavi() != null) {
                    s1 = (PreparedStatement) conn.prepareStatement(
                            "INSERT INTO `aportefonavi` "
                            + "(tiempoAportacion, montoMensual, acreditadoPor, idSolicitud)"
                            + "values (?,?,?,?");
                    s1.setInt(1, solic.getAportacionFonavi().getTiempoAportacion());
                    s1.setDouble(2, solic.getAportacionFonavi().getTiempoAportacion());
                    s1.setString(3, solic.getAportacionFonavi().getAcreditadoPor());
                    s1.setInt(4, solic.getId());
                    s1.executeUpdate();
                }

                if (solic.getVivienda() != null) {
                    s1 = (PreparedStatement) conn.prepareStatement(
                            "INSERT INTO `vivienda` "
                            + "(entidadFinancieraV, montoHipoteca, precio,nombreProyecto, idSolicitud)"
                            + "values (?,?,?,?,?)");
                    s1.setString(1, solic.getVivienda().getEntidadFinancieraV());
                    s1.setDouble(2, solic.getVivienda().getMontoHipoteca());
                    s1.setDouble(3, solic.getVivienda().getPrecioVivienda());
                    s1.setString(4, solic.getVivienda().getNombreProyecto());
                    s1.setInt(5, solic.getId());
                    s1.executeUpdate();
                }
            }
            conn.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAOSim.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public ArrayList<Solicitud> obtenerSolicitudes() {

        ArrayList<Solicitud> solicitudes = new ArrayList<Solicitud>();
        try {
            Connection conn = Conexion.obtenerConnexion();

            Statement st = (Statement) conn.createStatement();
            ResultSet rs = st.executeQuery("select  "
                    + " solicitud.idSolicitud, solicitud.estadoAceptacion,usuario.dni, usuario.nombre,usuario.apellidoP,"
                    + "usuario.apellidoM,solicitud.fechaInscripcion,"
                    + "solicitud.puntajeObtenido from usuario "
                    + " left  OUTER join solicitud on usuario.idUsuario= solicitud.idUsuario"
                    + "where usuario.rol='jefeFamilia';");


            while (rs.next()) {
                Solicitud sol = new Solicitud();

                sol.setId(rs.getInt("solicitud.idSolicitud"));
                sol.setEstadoAceptacion(rs.getString("estadoAceptacion"));
                sol.setFechaInscripcion(rs.getDate("fechaInscripcion"));
                sol.setPuntajeObtenido(rs.getInt("puntajeObtenido"));


                //todos los campos necesarios

                //Se crea y añade el usuario
                Usuario usuario = new JefeFamilia();
                usuario.setId(rs.getInt("id"));
                usuario.setDni(rs.getString("dni"));
                usuario.setNombres(rs.getString("nombre"));
                usuario.setApellidoP(rs.getString("apellidoP"));
                usuario.setApellidoM(rs.getString("apellidoM"));

                sol.setUser(usuario);


                //se añade las solicitudes para enviar
                solicitudes.add(sol);

            }


        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAOSim.class.getName()).log(Level.SEVERE, null, ex);
        }
        return solicitudes;
    }

    @Override
    public Solicitud obtenerSolicitudxUsuario(JefeFamilia jefeFamilia) {
        Solicitud solicitud = null;
        try {
            Connection conn = Conexion.obtenerConnexion();
            Statement st = (Statement) conn.createStatement();
            ResultSet rs = st.executeQuery("select * from solicitud where idUsuario=" + jefeFamilia.getId());
            if (rs.next()) {
                solicitud = new Solicitud();
                solicitud.setId(rs.getInt("idSolicitud"));
                solicitud.setEstado(rs.getString("estadoAceptacion"));
            }

            conn.close();
        } catch (SQLException ex) {
            Logger.getLogger(SolicitudDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return solicitud;

    }

    @Override
    public ArrayList<Solicitud> listarSolicitudes() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void enviarObservacionEstado(Solicitud solicitud) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void updatePuntajes() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
